#ifndef INSERTIONSORT_H
#define INSERTIONSORT_H

#include "sortalgorithm.h"

// 插入排序类，实现 SortAlgorithm 接口
class InsertionSort : public SortAlgorithm {
public:
    // 构造函数，接收初始数组数据
    InsertionSort(const QVector<int> &values);

    // 执行一步插入排序操作
    void step() override;

    // 判断排序是否完成
    bool isFinished() const override;

    // 获取当前的排序数据（包含颜色信息）
    const QVector<SortBar>& getData() const override;

    // 获取并清除当前步的比较次数
    int getAndResetCompareCount() override;

    // 获取并清除当前步的交换次数
    int getAndResetSwapCount() override;

    // 返回当前算法的时间/空间复杂度描述
    QString getComplexityInfo() const override;

    // 设置排序方向（升序或降序）
    void setOrder(SortOrder order) override;

private:
    QVector<SortBar> bars;             // 可视化用的排序数据，每个元素包含值与颜色
    int i = 1;                         // 外层循环指针（待插入元素的索引）
    int j = 0;                         // 内层循环指针（用于比较和移动）
    bool sorted = false;              // 是否已完成排序
    int compareCount = 0;             // 当前步的比较计数
    int swapCount = 0;                // 当前步的交换计数
    SortOrder sortOrder = SortOrder::Ascending;  // 排序方式（默认升序）
};

#endif // INSERTIONSORT_H
